package com.study.spmongodb.threadlocal;

import java.util.UUID;

/**
 * @author MI
 * @version 1.0
 * @date 2020/10/26 16:49
 */
public class Demo02 {
    private static ThreadLocal<Integer> logId = ThreadLocal.withInitial(() -> {
        // 这里只是一个示例，实际业务场景中可能是从数据源（如MySQL）中取数据
        return 1;
    });

    // 输出线程名、logId在当前线程的值
    public static void showLogId() {
        System.out.printf("%s : %s\n", Thread.currentThread().getName(), logId.get());
    }

    /**
     * 多个线程中使用 ThreadLocal
     */
    public static void main(String[] args) throws InterruptedException {
        showLogId();

        logId.set(10);
        showLogId();

        Thread t1 = new Thread(() -> {
            showLogId();
            logId.set(20);
            showLogId();
        });

        Thread t2 = new Thread(() -> {
            showLogId();
            logId.set(30);
            showLogId();
        });

        t1.start(); // 运行线程 t1
        t2.start(); // 运行线程 t2
        t1.join();  // 等待线程 t1 执行完
        t2.join();  // 等待线程 t2 执行完

        showLogId(); // 再看下当前线程的 logId 值

        System.out.println(UUID.randomUUID());


    }
}
